Skip to content

集合

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合使用哈希表来存储元素,所以必须是可哈希化的元素才能存储在集合中。

基本上值引用类型可哈希化,地址引用类型不可哈希化。

哈希化的集合

在哈希化的集合中,查找元素的速度要比列表快很多。

python
numbers = {1,5,3,1,2}
print(numbers) #输出{1, 5, 3, 2}

添加元素

使用 add 方法来添加新的元素到集合中。

python
numbers = {1,5,3,1,2}
numbers.add(4)
numbers.add(1) #集合自动去重
print(numbers) #输出{1, 5, 3, 2, 4}

删除元素

使用 discard 方法来删除集合中的某个元素。

python
numbers = {1,5,3,1,2}
numbers.discard(1)
print(numbers) #输出{5, 3, 2}

清空集合

使用 clear 方法来清空集合。

python
numbers = {1,5,3,1,2}
numbers.clear()
print(numbers) #输出set()

是否在集合内

使用 in 和 not in 运算符判断元素是否在集合内。

python
numbers = {1,5,3,1,2}
print(1 in numbers) #输出True
print(4 in numbers) #输出False

集合的速度

判断某个元素是否在一个序列里面,用集合判断比列表和元组都要快,因为集合使用的哈希方法存储的数据。

集合元素个数

使用 len 函数来得到集合元素的个数。

python
numbers = {1,5,3,1,2}
print(len(numbers)) #输出4

集合方法

add

set.add(x)

add 方法,添加 x到集合 set 中。

clear

set.clear()

clear 方法,清空集合到集合 set 中。

copy

set.copy()

copy 方法,返回一个浅复制 set 的集合。

python
numbers = {1,2,3}
new_numbers = numbers.copy()
print(new_numbers) #输出{1, 2, 3}

discard

set.discard(x)

discard 方法,在集合 set 中删除 x

pop

set.pop()

pop 方法,在集合 set 中删除最后一个元素并返回那个元素。

python
numbers = {1,5,3,1,2}
numbers.pop()
print(numbers) #输出{1,5,3}

update

set.update(set2)

update 方法,添加 set2 集合的元素到 set 中。

python
numbers = {1,5,3,1,2}
new_numbers = {4}
numbers.update(new_numbers)
print(numbers) #输出{1,5,3,2,4}

difference

set.difference(set2)

difference 方法,返回 set 与 set2 的差集。

python
numbers = {1,2,3}
new_numbers = {3,4,5}
print(numbers.difference(new_numbers)) #输出{1,2}

intersection

set.intersection(set2)

intersection 方法,返回 set 与 set2 的交集。

python
numbers = {1,2,3}
new_numbers = {3,4,5}
print(numbers.intersection(new_numbers)) #输出{3}

union

set.union(set2)

union 方法,返回 set 与 set2 的并集。

python
numbers = {1,2,3}
new_numbers = {3,4,5}
print(numbers.union(new_numbers)) #输出{1, 2, 3, 4,5}

isdisjoint

set.isdisjoint(set2)

isdisjoint 方法,判断 set 与 set2 是否有相同的元素,没有返回 True,否则返回 False。

python
numbers = {1,2,3}
old_numbers = {3,4,5}
new_numbers = {4,5}
print(numbers.isdisjoint(new_numbers)) #输出True
print(numbers.isdisjoint(old_numbers)) #输出False

issubset

set.issubset(set2)

issubset 方法,判断 set 是否是 set2 的子集。

python
numbers = {1,2,3}
old_numbers = {2,3}
new_numbers = {2,3,4}
print(old_numbers.issubset(numbers)) #输出True
print(new_numbers.issubset(numbers)) #输出False

issuperset

set.issuperset(set2)

issuperset 方法,判断 set 是否是 set2 的父集。

python
numbers = {1,2,3}
old_numbers = {1,2,4}
new_numbers = {1,2,3,4}
print(old_numbers.issuperset(numbers)) #输出False
print(new_numbers.issuperset(numbers)) #输出True

symmetric_difference

set.symmetric_difference(set2)

symmetric_difference 方法,返回 set2 和 set 中不重复的元素集。

python
numbers = {1,2,3}
new_numbers = {3,4,5}
print(numbers.symmetric_difference(new_numbers)) #输出{4,5,1,2}